package com.nuoniu.sibanyun.service.erp;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.bo.UsedGradeRuleBo;
import com.nuoniu.sibanyun.entity.dto.ErpGradeRuleDto;
import com.nuoniu.sibanyun.entity.erp.ErpGradeRule;
import com.nuoniu.sibanyun.userThread.UserInfo;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author baiqiang
 * @since 2020-09-22
 */
public interface IErpGradeRuleService extends IService<ErpGradeRule> {

    /**
     * 初始化 首次导入数据
     * @param accountId
     */
    void innitData(UserInfo userInfo, Integer accountId);

    /**
     * 获取 默认 编码规则
     * @return
     */
    List<ErpGradeRule> listDefErpGradeRule();

    /**
     * 获取当前 租户 所有的编码规则
     * @return
     */
    List<ErpGradeRule> listAllErpGradeRule();

    /**
     * 获取 某个账套 的编码规则
     * @return
     */
    List<ErpGradeRule> listCurrentErpGradeRule(Integer accountId);

    /**
     * 保存 租户的 某年份的编码规则
     * @param erpGradeRuleDtoList
     */
    void saveOrUpdateErpGradeRule(List<ErpGradeRuleDto> erpGradeRuleDtoList);

    /**
     * 获取当前年份 的某个 编码规则
     * @param code
     * @return
     */
    ErpGradeRule getCurrentYearErpGradeRuleByCode(String code);

    /**
     * 校验编码规则
     * @return
     */
    UsedGradeRuleBo checkCode(String code, String parentCode, Integer parentLevel, String ruleCode);

    /**
     * 校验 当前规则 是否 可修改
     * @param erpGradeRule
     */
    void checkGradeRule(ErpGradeRule erpGradeRule);

    /**
     * 获取 已经使用的 最大编码级次 和 使用的编码规则
     * @return
     */
    UsedGradeRuleBo getMaxRuleLevel(String tableName);

}
